package com.lhgray.sglhome.common.utlis

import android.graphics.Bitmap
import android.graphics.Canvas
import android.graphics.Color
import android.graphics.Paint
import android.graphics.Rect
import androidx.core.graphics.createBitmap

/**
 * bitmap 水印工具类
 */
object WatermarkUtils {
    /**
     * 将可变参数的字符串用换行符拼接
     * @param strings 可变参数的字符串列表
     * @return 拼接后的字符串，各元素之间用换行符分隔
     */
    fun joinStringsWithNewline(vararg strings: String): String {
        // 使用joinToString，指定分隔符为换行符\n
        return strings.joinToString(separator = "\n")
    }

    /**
     * 向图片添加四个角的水印
     * @param bitmap 原始图片
     * @param watermarkText 水印文字
     * @param textSize 水印文字大小
     * @param textColor 水印文字颜色
     * @param rotation 水印文字旋转角度（默认0度）
     * @param margin 水印文字距离图片边缘的距离（默认50dp）
     * @return 添加水印后的图片
     */
    fun addCornerWatermarks(
        bitmap: Bitmap,
        watermarkText: MutableList<String>,
        textSize: Float,
        textColor: Int = Color.BLACK,
        rotation: Float = 0f,
        margin: Float = 50f // 边距
    ): Bitmap {
        val newBitmap = createBitmap(bitmap.width, bitmap.height, Bitmap.Config.ARGB_8888)
        val canvas = Canvas(newBitmap)
        // 先绘制原图
        canvas.drawBitmap(bitmap, 0f, 0f, null);
        val paint = createPaint(textSize, textColor)
        // 绘制四个角的水印
        // 左上角
        drawText(canvas, watermarkText, margin, margin, paint, isYAdd = true, isXAdd = false)
        // 右上角
        drawText(canvas, watermarkText, bitmap.width - margin, margin, paint, isYAdd = true, isXAdd = true)
        // 左下角
        drawText(canvas, watermarkText, margin, bitmap.height - margin, paint, isXAdd = false, isYAdd = false)
        // 右下角
        drawText(canvas, watermarkText, bitmap.width - margin, bitmap.height - margin, paint, isXAdd = true, isYAdd = false)
        return newBitmap;
    }

    /**
     * 绘制水印文字
     */
    private fun drawText(
        canvas: Canvas,
        watermarkText: MutableList<String>,
        x: Float,
        y: Float,
        paint: Paint,
        // 新增参数：控制X轴方向（true为加，false为减）
        isXAdd: Boolean = false,
        // 新增参数：控制Y轴方向（true为加，false为减）
        isYAdd: Boolean = false
    ) {
        //文字其实的xy坐标
        var yPro = y
        var xPro = x
        // 计算水印位置（右下角）

        val textHeight = paint.descent() - paint.ascent()
        watermarkText.reversed().forEachIndexed { _, text ->
            if (isYAdd) {
                yPro += textHeight // 向上偏移行高
            } else {
                yPro -= textHeight // 向上偏移行高
            }
            //是左边的水印的话就需要减去文字的宽度
            if (isXAdd) {
                val measureText = paint.measureText(text)//文字的宽度
                xPro = x - measureText
            }
            canvas.drawText(text, xPro, yPro, paint)
        }
    }

    private fun createPaint(
        textSize: Float,
        textColor: Int,
        alpha: Int = 100,
        rotation: Float = 0f
    ) = Paint(Paint.ANTI_ALIAS_FLAG).also {
        it.color = textColor
        it.textSize = textSize
        it.alpha = alpha; // 半透明
    }


}